package com.itany.corejava.code06_面向对象;

import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2024年01月15日 10:46
 */
public class Test03_全局变量与局部变量 {
    public static void main(String[] args) {
        Account account = new Account();
        account.name = "admin";
        account.money = 5000;
//        account.show("alice");
//        account.print();
//        System.out.println("************************");
//        Account account2 = new Account();
//        account2.name = "jack";
//        account2.money = 6000;
//        account2.show("alice");

        account.showMenu();
    }
}

class Account {
    // 全局变量
    String name;    // 户主
    double money;   // 账户余额

    // 方法的参数属于局部变量
    public void show(String name) {
        // 方法体中定义的变量也属于局部变量
        // 在局部变量中,所有变量必须先赋值再使用
        // 当声明没有赋值,使用时会报错
        double money = 10000;
        // 当局部变量与全局变量重名时
        // 访问时默认访问的是局部变量
        System.out.println(name);
        System.out.println(money);
        // 如果想要访问全局变量,可以通过this.全局变量名来访问
        // this表示当前类的一个对象
        // 在使用时,this表示this所在的类的一个对象
        // 简单来讲,该方法被哪一个对象调用了,this就表示哪一个对象
        System.out.println("全局变量name:" + this.name);
        System.out.println("全局变量money:" + this.money);
    }

    public void print() {
        // 当全局变量与局部变量没有重名时
        // 可以直接访问全局变量
        System.out.println(name);
        System.out.println(money);
    }

    /**
     * 查询余额,打印出户主姓名与账户余额
     */
    public void queryMoney() {
        System.out.println("姓名:" + name + ",当前账户余额:" + money);
    }

    /**
     * 存钱,打印存储了多少钱,存储后账户余额
     * @param money
     */
    public void saveMoney(double money) {
        this.money += money;
        System.out.println("您存储了" + money + "元,当前账户余额为:" + this.money);
    }

    /**
     * 转账,打印你给谁转账,转了多少钱,转账后账户余额是多少
     */
    public void transfer(String name, double money) {
        if (this.money < money) {
            System.out.println("您的账户余额不足,无法转账,当前余额为:" + this.money);
        } else {
            this.money -= money;
            System.out.println(name + "向您转账了" + money + "元,您的当前账户余额为:" + this.money);
        }
    }

    /**
     * 取钱,打印取出了多少钱,剩余的账户余额是多少
     * @param money
     */
    public void getMoney(double money) {
        if (this.money < money) {
            System.out.println("您的账户余额不足,当前余额为:" + this.money);
        } else {
            this.money -= money;
            System.out.println("您取出了" + money + "元,当前账户余额为:" + this.money);
        }
    }

    public void showMenu() {
        Scanner sc = new Scanner(System.in);

        while (true) {
            System.out.println("*******************************************");
            System.out.print("欢迎使用账户管理系统,请选择功能(1.查询余额 2.存钱 3.转账 4.取钱 5.退出):");
            int choice = sc.nextInt();
            switch (choice) {
                case 1:
                    queryMoney();
                    break;
                case 2:
                    System.out.print("请输入存储的金额:");
                    double money = sc.nextDouble();
                    saveMoney(money);
                    break;
                case 3:
                    System.out.print("请输入您向谁转账:");
                    String name = sc.next();
                    System.out.print("请输入转账金额:");
                    money = sc.nextDouble();
                    transfer(name, money);
                    break;
                case 4:
                    System.out.print("请输入提取的金额:");
                    money = sc.nextDouble();
                    getMoney(money);
                    break;
                case 5:
                    System.out.println("您已经退出,欢迎下次光临");
                    return;
                default:
                    System.out.println("您输入的选项有误,请重新输入");
                    break;
            }

        }

    }
}
